#include "Dri_NVS.h"
#include "nvs_flash.h"
#include "Com_Debug.h"

// nvs句柄
static nvs_handle_t my_handle;

/**
 * @brief 初始化
 *
 */
esp_err_t Dri_NVS_Init(void)
{
    // 初始化
    esp_err_t err = nvs_flash_init();
    if (err != ESP_OK)
    {
        MY_LOGI("初始化失败");
        return err;
    }

    // 打开 NVS_READWRITE = 读写模式  pwd = 命名空间
    return nvs_open("pwd", NVS_READWRITE, &my_handle);
}

/**
 * @brief 添加数据
 *
 * @param key 键
 * @param data 值
 */
esp_err_t Dri_NVS_SetData_Str(const char *key, const char *data)
{
    // 写入数据  key = 键  data = 值
    nvs_set_str(my_handle, key, data);
    // 提交
    return nvs_commit(my_handle);
}

/**
 * @brief 添加数据
 * 
 * @param key 键
 * @param data 值
 */
esp_err_t Dri_NVS_SetData_Int(const char *key, int8_t num)
{ // 写入数据  key = 键  data = 值
    nvs_set_i8(my_handle,key,num);
    // 提交
    return nvs_commit(my_handle);
}

/**
 * @brief 根据key删除数据
 *
 * @param key 键
 * @return esp_err_t
 */
esp_err_t Dri_NVS_DelKey(const char *key)
{
    // 删除数据  key = 键
    return nvs_erase_key(my_handle, key);
}

/**
 * @brief 删除所有数据
 *
 * @return esp_err_t
 */
esp_err_t Dri_NVS_DelAll(void)
{
    // 删除所有数据
    return nvs_erase_all(my_handle);
}

/**
 * @brief 读取数据
 * 
 * @param key 键
 * @param data 值
 * @return esp_err_t
 */
esp_err_t Dri_NVS_GetData_Str(const char *key, char *data, uint8_t *length)
{
    return nvs_get_str(my_handle, key, data, (size_t *)length);
}

/**
 * @brief 根据key 获取int数据
 * 
 * @param key 
 * @param num 
 * @return esp_err_t 
 */
esp_err_t Dri_NVS_GetData_Int(const char *key, int8_t *num){
    return nvs_get_i8(my_handle,key,num);
}

/**
 * @brief 根据key判断数据是否存在
 * 
 * @param key 
 * @return esp_err_t 
 */
esp_err_t Dri_NVS_FindKey_Str(const char *key)
{
    return nvs_find_key(my_handle,key,NULL);
}
